import { useMock } from './request';

/**
 * 通用请求方法包装器，根据useMock开关决定使用真实请求还是模拟数据
 * @param {Function} apiRequest - 真实API请求函数
 * @param {Object|Function} mockData - 模拟数据对象或生成模拟数据的函数
 * @returns {Promise<Object>} - 返回Promise，包含响应数据
 */
export const requestWrapper = async (apiRequest, mockData) => {
  if (!useMock) {
    try {
      // 使用真实API请求
      return await apiRequest();
    } catch (error) {
      console.error('API request failed:', error);
      throw error;
    }
  } else {
    // 使用模拟数据
    // 如果mockData是函数，则调用它获取数据，否则直接使用mockData对象
    const data = typeof mockData === 'function' ? mockData() : mockData;
    
    // 模拟网络延迟
    return new Promise(resolve => {
      setTimeout(() => {
        resolve({
          code: 200,
          msg: '操作成功(模拟数据)',
          data: data
        });
      }, 300);
    });
  }
};

/**
 * 生成指定范围的随机整数
 * @param {number} min - 最小值
 * @param {number} max - 最大值
 * @returns {number} - 随机整数
 */
export const randomInt = (min, max) => {
  return Math.floor(Math.random() * (max - min + 1) + min);
};

/**
 * 从数组中随机选择一个元素
 * @param {Array} array - 源数组
 * @returns {*} - 随机元素
 */
export const randomPick = (array) => {
  return array[Math.floor(Math.random() * array.length)];
};

/**
 * 生成随机日期字符串
 * @param {number} startDay - 开始日期的偏移天数（相对于当前日期的负值）
 * @param {number} endDay - 结束日期的偏移天数（相对于当前日期的正值）
 * @returns {string} - 日期字符串 YYYY-MM-DD HH:mm:ss
 */
export const randomDate = (startDay = -30, endDay = 0) => {
  const start = new Date();
  start.setDate(start.getDate() + startDay);
  
  const end = new Date();
  end.setDate(end.getDate() + endDay);
  
  const date = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
  
  return date.toLocaleString('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  }).replace(/\//g, '-');
};

/**
 * 生成分页数据结构
 * @param {Array} list - 数据列表
 * @param {number} pageNum - 当前页码
 * @param {number} pageSize - 每页数量
 * @param {number} total - 总数量，默认为list.length
 * @returns {Object} - 分页数据结构
 */
export const paginate = (list, pageNum, pageSize, total = null) => {
  return {
    list: list,
    total: total !== null ? total : list.length,
    pageNum: pageNum || 1,
    pageSize: pageSize || 10
  };
}; 